// 处理sessionStorage的几个方法
import { getCache, setCache, removeCache } from '@/utils/session';
// 登录登出的接口
import { login, logout, getCodeTest } from '@/api/user';
// 路由模块，暂时不写那么复杂
// import { resetRouter } from '@/router';
const state = {
  accountInfo: getCache('USERINFO') || '',//账户信息
  token: getCache('TOKEN') || '',//token
};
// 但是在 vuex 中，数据是集中管理的，不能直接去更改数据，
// 所以会在组件中通过Commit 【this.$store.commit('DEMO', {demo: '我是传递的数据'});】
// 把动作提交（Commit）到 Mutations 中;
// 然后 Mutations 就去改变（Mutate）State 中的数据;
// DEMO(state, payload) {
//   state.demo = payload.demo
// },
const mutations = {
  // 示例：payload是一个对象，组件中使用的时候也传递对象 this.$store.commit('DEMO', {demo: '我是传递的数据'});
  // DEMO(state, payload) {
  //   state.demo = payload.demo
  // },
  SET_TOKEN(state, token) {
    state.token = token;
  },
  SET_USERINFO(state, userInfo) {
    state.accountInfo = userInfo;
  },
};

const actions = {
  // demoAction({commit}, date) {
  //   return new Promise((resolve, reject) => {
  //     getDemo(date)
  //       .then(res => {
  //           commit('DEMO', res);
  //           resolve(res);
  //       })
  //       .catch(err => {
  //         reject(err);
  //       });
  //   });
  // },
  LoginAction({ commit }, userInfo) {
    return new Promise((resolve, reject)=> {
      login(userInfo)
        .then(res => {
          console.log('22222222222222222222');
          
          const { data } = res;
          console.log('data.token', data.token);
          
          // token存储到sessionStorage\vuex中
          setCache('TOKEN', data.token);
          commit('SET_TOKEN', data.token);
          // 用户信息存储到session、vuex中
          commit('SET_USERINFO', data.userInfo);
          setCache('USERINFO', data.userInfo);
          resolve();
        })
        .catch(err => {
          reject(err);
        })
    })
  }
};

export default {
  state,
  mutations,
  actions,
  namespaced: true,//命名空间，避免命名冲突
};
